package pkgListaLigada;/** Esta clase pertenece a este paquete**/

/*
 * Descripcion: Esta clase crea la lista ligada, con sus respectivos
 * metodos.
 * @autor: Karla Cristina Obando Narváez
 * Fecha: 06 de Marzo de 2012
 * Programa #1
 */
public class ClsLista {
    
    private String snombreLista = "";
    protected ClsNodo primero;
    protected ClsNodo ultimo;
    
  /*Construye una lista ligada con un nombre*/
  public ClsLista(String snombreLista) {
        primero = ultimo = null;
        if (snombreLista != null) {
            this.snombreLista = snombreLista;
         }
    }
  
    /* Obtiene el primer nodo de la lista ligada*/
    public ClsNodo MthObtienePrimero(){
        return primero;
    }
    
    /*Evalua si la lista está vacia, retorna true */
    public boolean bEsVacia(){
        return (primero == null);
    }
    
    /**
     * Calcula el tamaño de la lista ligada
     * @return El tamañoo de la lista ligada
     */
    public int iMthLongitud(){
        int ilongitud =0;
        ClsNodo nodo = MthObtienePrimero();
        while(nodo != null){
            ilongitud ++;
            nodo=nodo.MthObtieneLiga();
        }
        return ilongitud;
    }
    
    /**
     * Inserta un dato al final de la lista ligada
     * @param dato Es el parámetro que guarda cuando crea el nodo.
     */
    public void vMthInsertarAlFinal(Object dato){
        ClsNodo nodo = new ClsNodo(dato);
        vMthInsertarAlFinal(nodo);
    }
    
    /**
     * Inserta un nodo al final de la lista ligada
     * @param nodo Es el nodo a insertar
     */
    public void vMthInsertarAlFinal(ClsNodo nodo){
        if(MthObtienePrimero() == null){
            primero = nodo;
            ultimo = nodo;
        }else{
            ultimo.vMthAsignaLiga(nodo);
            ultimo = nodo;
        }
  }

    /**
    * Retorna el nombre de la lista ligada
    * @return El nombre de la lista ligada
    */
    public String sMthObtieneNombre() {
        return snombreLista;
    }

    /**
    * Asigna un nombre a la lista ligada
    * @param snombreLista Es el nombre asignado a la lista ligada
    */
    public void vMthAsignaNombre(String snombre) {
        this.snombreLista = snombreLista;
    }       

}
